Many task-oriented systems can be described as a system of systems. Each such subsystem (i.e., a component of a system of systems) performs a specific set of functions of arbitrary complexity within its specified hardware and software configuration. A system of systems can then be specified by stipulating connections between inputs and outputs of the components. It is assumed that the relevant inputs and outputs of connecting components can be specified within a common semantic framework, and then for example, implemented with a translational layer external to each component. However, there are several other challenges in building a system of systems: synchronization between the components, modularity (i.e., the ability to swap one component in for another one without modifying the overall system of systems architecture and execution) and the ability to add components to build a new system of systems without having to modify any of the components. An additional challenge arises when the components are “black boxes.”